Build 447 v0.9.1

---

## High School ("SchoolLocation"): localized “no school lot registered” warning

### Issue (before)

- In **"SchoolLocation.AssignStudents()"**, when **"__locations.Count == 0"** after the auto-registration attempt from a lot typed **"HighSchool"**, the code called **"UITools.Warning("SchoolLocation.AssignStudents:NoSchoolRegistered")"** with a **literal string**.
- **"UITools.Warning"** forwards text to **"StyledNotification"** **without** going through **"UITools.Localize"**, so players saw the **raw token** and no STBL lookup occurred for **"Oniki.KinkyMod.…"**.

### Change

- **"Oniki.Careers/SchoolLocation.cs"** — same branch now uses:
  - **"UITools.Warning(UITools.Localize("SchoolLocation.AssignStudents:NoSchoolRegistered"));"**
- **Logical key (code)** is unchanged: **"SchoolLocation.AssignStudents:NoSchoolRegistered"**.
- **Runtime / STBL string key** (full key for FNV64 / package editors): **"Oniki.KinkyMod.SchoolLocation.AssignStudents:NoSchoolRegistered"**.
- If the STBL row is **missing**, **"Localize"** still falls back to showing the short logical key (same as before from a player’s perspective, but the code path is now correct for packaged strings).

-------------------------------------

Build 447 v0.9.2

-- 

## Sleep WooHoo / bed interactions: pie menu reliability and role clarity

### Background

- Reports indicated a **broken or sparse sleep-related pie menu** on Sims who were asleep (missing entries, empty queue under the Kinky World branch, interference when other script mods added entries in the same pie subtree).
- With **Enable Dominant/Submissive Relation** enabled, the menu could fail or present inconsistent options because naming and relationship branches mixed dom/sub with the sleep WooHoo flow.

### Dom/sub vs sleep WooHoo

- **Dominant/submissive** behavior remains available where it was already used outside this flow.
- **Sleep WooHoo** no longer ties interaction labels or relationship handling to the dom/sub setting: names and "TryWooHooInBed" relationship logic use the **trait-based** path unless the player’s role is explicitly **locked** by the new sleep interaction flags (see below).

### Active and Passive entries (always visible)

- For **vaginal**, **handjob**, and **oral** WooHoo on a sleeping Sim (non-rape categories), the pie menu now offers **two separate interactions** at all times:
  - **Active** — uses the primary interaction name + category tuning (actor-sub animation path off as appropriate for that definition).
  - **Passive** — uses the “sub” interaction name key ("InteractionNameSub…" family where applicable) + category, with **"UseActorSubAnimationPath"** so clip selection matches the passive role.
- **Incest** variants mirror the same pattern with dedicated passive definition classes (cannot inherit from sealed "Definition_Incest"; passive incest classes inherit **"Definition"** directly with the correct tuning flags).
- **Rape** remains a **single** interaction definition (no duplicate active/passive pair).
- **"WooHooSleepingSimOnBed.Run()"** (on "KWBedSleep") sets:
  - "WooHooCategory"
  - **"mSleepWooHooPlayerRoleLocked"** — player’s active vs passive choice is fixed for the upcoming bed flow
  - **"mSleepWooHooUseActorSubPath"** — whether this choice maps to the actor-sub animation path (false for rape; false when category is "None"; otherwise driven by passive vs active)

### "KWBedSleep" integration

- New fields: **"mSleepWooHooPlayerRoleLocked"**, **"mSleepWooHooUseActorSubPath"**.
- **"TryAddInteractions"**, **"Cleanup"**, **"StartWooHoo"** (and related removal lists): include all new passive definitions and singletons so they register and tear down cleanly.
- **"TryWooHooInBed"**: when **"mSleepWooHooPlayerRoleLocked"** is true, **"mActorSub"** / **"mTargetSub"** are **forced** from **"mSleepWooHooUseActorSubPath"** so stage parameters match the pie-menu choice; when not locked, prior trait-based (and non–sleep-dom/sub) logic applies.
- **"Cleanup"**: resets both flags after the situation ends.

### Files touched

- "Oniki.Interactions/WooHooSleepingSimOnBed.cs"
- "Oniki.Interactions/KWBedSleep.cs"

### Localization note (STBL)

- Ensure STBL coverage for passive labels that mirror active strings with a **"Sub"** logical key (e.g. **"InteractionNameSubHandjob"**, **"InteractionNameSubOraljob"**, and incest counterparts if those keys are used in code) so passive rows do not show raw keys in-game. Full keys for packaging follow **"Oniki.KinkyMod.<logicalKey>"** as usual.

---

## Playtesting focus

- Sleeper pie menu: each of **active** / **passive** vaginal, handjob, oral should enqueue and play the **expected** animations after **"SetWooHooParameters"** (verify especially with **Enable Dominant/Submissive Relation** ON and OFF).
- Regression: rape and situation-specific definitions still behave as before.
- Coexistence with other mods that inject Kinky-branch entries: verify no duplicate phantom entries and that the queue is not left empty after picking a sleep WooHoo option.
- **High School:** with KW High School enabled and **no** School lot registered, trigger student assignment so the warning appears: with STBL updated, text should be the localized message, not the raw **"SchoolLocation.AssignStudents:NoSchoolRegistered"** token.
